import { ObjectLiteral, SelectQueryBuilder } from 'typeorm';

// 查询全等参数
// if (query.gender) {
// queryBuilder.andWhere('profile_xx.gender = :gender', {
//   gender: query.gender, // 如果没有传入gender，则不进行筛选
// });

//   1=1 语法(如果没传入gender,那么表达式为 1=1 无冒号不会替换后面的内容
//   queryBuilder.andWhere(
//     query.gender ? 'profile_xx.gender = :gender1233' : '1=1',
//     {
//       gender1233: query.gender, // 如果没有传入gender，则不进行筛选
//     },
//   );
// }
export const queryBuilderAndWhereEQ = <T extends ObjectLiteral>(
  queryBuilder: SelectQueryBuilder<T>,
  obj: Record<string, unknown>,
) => {
  Object.keys(obj).forEach((key) => {
    if (obj[key]) {
      // :${key} 与 后面对象的key 对应就行
      queryBuilder.andWhere(`${key} = :${key}`, {
        [key]: obj[key],
      });
    }
  });
  return queryBuilder;
};

export const queryBuilderAndWhereLike = <T extends ObjectLiteral>(
  queryBuilder: SelectQueryBuilder<T>,
  obj: Record<string, unknown>,
) => {
  Object.keys(obj).forEach((key) => {
    if (obj[key]) {
      // :${key} 与 后面对象的key 对应就行
      const value = obj[key] || '';
      queryBuilder.andWhere(`${key} Like :${key}`, {
        [key]: `%${JSON.parse(JSON.stringify(value))}%`,
      });
    }
  });
  return queryBuilder;
};
